package com.zxl.designpattern.behavioral.state;

/**
 * 主类，演示状态模式的使用
 */
public class Test {
    public static void main(String[] args) {
        // 创建一个贩卖机，初始有3瓶饮料，价格5元
        VendingMachine vendingMachine = new VendingMachine(3, 5);
        System.out.println(vendingMachine);
        System.out.println("---------正常购买流程---------");
        // 测试购买流程
        vendingMachine.selectItem();  // 先选择商品
        vendingMachine.pay(5);  // 再支付准确金额
        vendingMachine.dispense();  // 正常发货
        System.out.println(vendingMachine); // 余2，状态可挑选
        System.out.println("--------补充库存----------");
        // 测试补充库存
        vendingMachine.refill(2); // 补货成功 余4，状态可挑选
        vendingMachine.pay(5);  // 请先选择商品
        vendingMachine.selectItem();  // 选了商品，状态变为支付
        vendingMachine.dispense();  // 未支付发不了货
        System.out.println(vendingMachine); // 余3，状态支付
        System.out.println("--------售罄----------");
        // 测试售罄状态
        vendingMachine.pay(5); //支付成功，状态变为出货
        vendingMachine.selectItem(); //出货状态，选不了商品
        vendingMachine.dispense();  // 出货成功，状态变为挑选
        vendingMachine.pay(5);  //支付失败，状态挑选
        vendingMachine.selectItem();  //选了商品，状态变为支付
        System.out.println(vendingMachine);
    }
}    